(0) Obligation:
Runtime Complexity TRS:
The TRS R consists of the following rules:
a__nats → a__adx(a__zeros)
a__zeros → cons(0, zeros)
a__incr(cons(X, Y)) → cons(s(X), incr(Y))
a__adx(cons(X, Y)) → a__incr(cons(X, adx(Y)))
a__hd(cons(X, Y)) → mark(X)
a__tl(cons(X, Y)) → mark(Y)
mark(nats) → a__nats
mark(adx(X)) → a__adx(mark(X))
mark(zeros) → a__zeros
mark(incr(X)) → a__incr(mark(X))
mark(hd(X)) → a__hd(mark(X))
mark(tl(X)) → a__tl(mark(X))
mark(cons(X1, X2)) → cons(X1, X2)
mark(0) → 0
mark(s(X)) → s(X)
a__nats → nats
a__adx(X) → adx(X)
a__zeros → zeros
a__incr(X) → incr(X)
a__hd(X) → hd(X)
a__tl(X) → tl(X)
Rewrite Strategy: FULL
(1) DecreasingLoopProof (EQUIVALENT transformation)
The following loop(s) give(s) rise to the lower bound Ω(n1):
The rewrite sequence
a__hd(cons(hd(cons(X11058_3, X21059_3)), Y)) →+ a__hd(cons(X11058_3, X21059_3))
gives rise to a decreasing loop by considering the right hand sides subterm at position [].
The pumping substitution is [X11058_3 / hd(cons(X11058_3, X21059_3))].
The result substitution is [Y / X21059_3].
(2) BOUNDS(n^1, INF)
(3) RenamingProof (EQUIVALENT transformation)
Renamed function symbols to avoid clashes with predefined symbol.
(4) Obligation:
Runtime Complexity Relative TRS:
The TRS R consists of the following rules:
a__nats → a__adx(a__zeros)
a__zeros → cons(0', zeros)
a__incr(cons(X, Y)) → cons(s(X), incr(Y))
a__adx(cons(X, Y)) → a__incr(cons(X, adx(Y)))
a__hd(cons(X, Y)) → mark(X)
a__tl(cons(X, Y)) → mark(Y)
mark(nats) → a__nats
mark(adx(X)) → a__adx(mark(X))
mark(zeros) → a__zeros
mark(incr(X)) → a__incr(mark(X))
mark(hd(X)) → a__hd(mark(X))
mark(tl(X)) → a__tl(mark(X))
mark(cons(X1, X2)) → cons(X1, X2)
mark(0') → 0'
mark(s(X)) → s(X)
a__nats → nats
a__adx(X) → adx(X)
a__zeros → zeros
a__incr(X) → incr(X)
a__hd(X) → hd(X)
a__tl(X) → tl(X)
S is empty.
Rewrite Strategy: FULL
(5) SlicingProof (LOWER BOUND(ID) transformation)
Sliced the following arguments:
s/0
(6) Obligation:
Runtime Complexity Relative TRS:
The TRS R consists of the following rules:
a__nats → a__adx(a__zeros)
a__zeros → cons(0', zeros)
a__incr(cons(X, Y)) → cons(s, incr(Y))
a__adx(cons(X, Y)) → a__incr(cons(X, adx(Y)))
a__hd(cons(X, Y)) → mark(X)
a__tl(cons(X, Y)) → mark(Y)
mark(nats) → a__nats
mark(adx(X)) → a__adx(mark(X))
mark(zeros) → a__zeros
mark(incr(X)) → a__incr(mark(X))
mark(hd(X)) → a__hd(mark(X))
mark(tl(X)) → a__tl(mark(X))
mark(cons(X1, X2)) → cons(X1, X2)
mark(0') → 0'
mark(s) → s
a__nats → nats
a__adx(X) → adx(X)
a__zeros → zeros
a__incr(X) → incr(X)
a__hd(X) → hd(X)
a__tl(X) → tl(X)
S is empty.
Rewrite Strategy: FULL
(7) TypeInferenceProof (BOTH BOUNDS(ID, ID) transformation)
Infered types.
(8) Obligation:
TRS:
Rules:
a__nats → a__adx(a__zeros)
a__zeros → cons(0', zeros)
a__incr(cons(X, Y)) → cons(s, incr(Y))
a__adx(cons(X, Y)) → a__incr(cons(X, adx(Y)))
a__hd(cons(X, Y)) → mark(X)
a__tl(cons(X, Y)) → mark(Y)
mark(nats) → a__nats
mark(adx(X)) → a__adx(mark(X))
mark(zeros) → a__zeros
mark(incr(X)) → a__incr(mark(X))
mark(hd(X)) → a__hd(mark(X))
mark(tl(X)) → a__tl(mark(X))
mark(cons(X1, X2)) → cons(X1, X2)
mark(0') → 0'
mark(s) → s
a__nats → nats
a__adx(X) → adx(X)
a__zeros → zeros
a__incr(X) → incr(X)
a__hd(X) → hd(X)
a__tl(X) → tl(X)
Types:
a__nats :: 0':zeros:cons:s:incr:adx:nats:hd:tl
a__adx :: 0':zeros:cons:s:incr:adx:nats:hd:tl → 0':zeros:cons:s:incr:adx:nats:hd:tl
a__zeros :: 0':zeros:cons:s:incr:adx:nats:hd:tl
cons :: 0':zeros:cons:s:incr:adx:nats:hd:tl → 0':zeros:cons:s:incr:adx:nats:hd:tl → 0':zeros:cons:s:incr:adx:nats:hd:tl
0' :: 0':zeros:cons:s:incr:adx:nats:hd:tl
zeros :: 0':zeros:cons:s:incr:adx:nats:hd:tl
a__incr :: 0':zeros:cons:s:incr:adx:nats:hd:tl → 0':zeros:cons:s:incr:adx:nats:hd:tl
s :: 0':zeros:cons:s:incr:adx:nats:hd:tl
incr :: 0':zeros:cons:s:incr:adx:nats:hd:tl → 0':zeros:cons:s:incr:adx:nats:hd:tl
adx :: 0':zeros:cons:s:incr:adx:nats:hd:tl → 0':zeros:cons:s:incr:adx:nats:hd:tl
a__hd :: 0':zeros:cons:s:incr:adx:nats:hd:tl → 0':zeros:cons:s:incr:adx:nats:hd:tl
mark :: 0':zeros:cons:s:incr:adx:nats:hd:tl → 0':zeros:cons:s:incr:adx:nats:hd:tl
a__tl :: 0':zeros:cons:s:incr:adx:nats:hd:tl → 0':zeros:cons:s:incr:adx:nats:hd:tl
nats :: 0':zeros:cons:s:incr:adx:nats:hd:tl
hd :: 0':zeros:cons:s:incr:adx:nats:hd:tl → 0':zeros:cons:s:incr:adx:nats:hd:tl
tl :: 0':zeros:cons:s:incr:adx:nats:hd:tl → 0':zeros:cons:s:incr:adx:nats:hd:tl
hole_0':zeros:cons:s:incr:adx:nats:hd:tl1_0 :: 0':zeros:cons:s:incr:adx:nats:hd:tl
gen_0':zeros:cons:s:incr:adx:nats:hd:tl2_0 :: Nat → 0':zeros:cons:s:incr:adx:nats:hd:tl
(9) OrderProof (LOWER BOUND(ID) transformation)
Heuristically decided to analyse the following defined symbols:
a__hd,
mark,
a__tlThey will be analysed ascendingly in the following order:
a__hd = mark
a__hd = a__tl
mark = a__tl
(10) Obligation:
TRS:
Rules:
a__nats →
a__adx(
a__zeros)
a__zeros →
cons(
0',
zeros)
a__incr(
cons(
X,
Y)) →
cons(
s,
incr(
Y))
a__adx(
cons(
X,
Y)) →
a__incr(
cons(
X,
adx(
Y)))
a__hd(
cons(
X,
Y)) →
mark(
X)
a__tl(
cons(
X,
Y)) →
mark(
Y)
mark(
nats) →
a__natsmark(
adx(
X)) →
a__adx(
mark(
X))
mark(
zeros) →
a__zerosmark(
incr(
X)) →
a__incr(
mark(
X))
mark(
hd(
X)) →
a__hd(
mark(
X))
mark(
tl(
X)) →
a__tl(
mark(
X))
mark(
cons(
X1,
X2)) →
cons(
X1,
X2)
mark(
0') →
0'mark(
s) →
sa__nats →
natsa__adx(
X) →
adx(
X)
a__zeros →
zerosa__incr(
X) →
incr(
X)
a__hd(
X) →
hd(
X)
a__tl(
X) →
tl(
X)
Types:
a__nats :: 0':zeros:cons:s:incr:adx:nats:hd:tl
a__adx :: 0':zeros:cons:s:incr:adx:nats:hd:tl → 0':zeros:cons:s:incr:adx:nats:hd:tl
a__zeros :: 0':zeros:cons:s:incr:adx:nats:hd:tl
cons :: 0':zeros:cons:s:incr:adx:nats:hd:tl → 0':zeros:cons:s:incr:adx:nats:hd:tl → 0':zeros:cons:s:incr:adx:nats:hd:tl
0' :: 0':zeros:cons:s:incr:adx:nats:hd:tl
zeros :: 0':zeros:cons:s:incr:adx:nats:hd:tl
a__incr :: 0':zeros:cons:s:incr:adx:nats:hd:tl → 0':zeros:cons:s:incr:adx:nats:hd:tl
s :: 0':zeros:cons:s:incr:adx:nats:hd:tl
incr :: 0':zeros:cons:s:incr:adx:nats:hd:tl → 0':zeros:cons:s:incr:adx:nats:hd:tl
adx :: 0':zeros:cons:s:incr:adx:nats:hd:tl → 0':zeros:cons:s:incr:adx:nats:hd:tl
a__hd :: 0':zeros:cons:s:incr:adx:nats:hd:tl → 0':zeros:cons:s:incr:adx:nats:hd:tl
mark :: 0':zeros:cons:s:incr:adx:nats:hd:tl → 0':zeros:cons:s:incr:adx:nats:hd:tl
a__tl :: 0':zeros:cons:s:incr:adx:nats:hd:tl → 0':zeros:cons:s:incr:adx:nats:hd:tl
nats :: 0':zeros:cons:s:incr:adx:nats:hd:tl
hd :: 0':zeros:cons:s:incr:adx:nats:hd:tl → 0':zeros:cons:s:incr:adx:nats:hd:tl
tl :: 0':zeros:cons:s:incr:adx:nats:hd:tl → 0':zeros:cons:s:incr:adx:nats:hd:tl
hole_0':zeros:cons:s:incr:adx:nats:hd:tl1_0 :: 0':zeros:cons:s:incr:adx:nats:hd:tl
gen_0':zeros:cons:s:incr:adx:nats:hd:tl2_0 :: Nat → 0':zeros:cons:s:incr:adx:nats:hd:tl
Generator Equations:
gen_0':zeros:cons:s:incr:adx:nats:hd:tl2_0(0) ⇔ 0'
gen_0':zeros:cons:s:incr:adx:nats:hd:tl2_0(+(x, 1)) ⇔ cons(0', gen_0':zeros:cons:s:incr:adx:nats:hd:tl2_0(x))
The following defined symbols remain to be analysed:
mark, a__hd, a__tl
They will be analysed ascendingly in the following order:
a__hd = mark
a__hd = a__tl
mark = a__tl
(11) NoRewriteLemmaProof (LOWER BOUND(ID) transformation)
Could not prove a rewrite lemma for the defined symbol mark.
(12) Obligation:
TRS:
Rules:
a__nats →
a__adx(
a__zeros)
a__zeros →
cons(
0',
zeros)
a__incr(
cons(
X,
Y)) →
cons(
s,
incr(
Y))
a__adx(
cons(
X,
Y)) →
a__incr(
cons(
X,
adx(
Y)))
a__hd(
cons(
X,
Y)) →
mark(
X)
a__tl(
cons(
X,
Y)) →
mark(
Y)
mark(
nats) →
a__natsmark(
adx(
X)) →
a__adx(
mark(
X))
mark(
zeros) →
a__zerosmark(
incr(
X)) →
a__incr(
mark(
X))
mark(
hd(
X)) →
a__hd(
mark(
X))
mark(
tl(
X)) →
a__tl(
mark(
X))
mark(
cons(
X1,
X2)) →
cons(
X1,
X2)
mark(
0') →
0'mark(
s) →
sa__nats →
natsa__adx(
X) →
adx(
X)
a__zeros →
zerosa__incr(
X) →
incr(
X)
a__hd(
X) →
hd(
X)
a__tl(
X) →
tl(
X)
Types:
a__nats :: 0':zeros:cons:s:incr:adx:nats:hd:tl
a__adx :: 0':zeros:cons:s:incr:adx:nats:hd:tl → 0':zeros:cons:s:incr:adx:nats:hd:tl
a__zeros :: 0':zeros:cons:s:incr:adx:nats:hd:tl
cons :: 0':zeros:cons:s:incr:adx:nats:hd:tl → 0':zeros:cons:s:incr:adx:nats:hd:tl → 0':zeros:cons:s:incr:adx:nats:hd:tl
0' :: 0':zeros:cons:s:incr:adx:nats:hd:tl
zeros :: 0':zeros:cons:s:incr:adx:nats:hd:tl
a__incr :: 0':zeros:cons:s:incr:adx:nats:hd:tl → 0':zeros:cons:s:incr:adx:nats:hd:tl
s :: 0':zeros:cons:s:incr:adx:nats:hd:tl
incr :: 0':zeros:cons:s:incr:adx:nats:hd:tl → 0':zeros:cons:s:incr:adx:nats:hd:tl
adx :: 0':zeros:cons:s:incr:adx:nats:hd:tl → 0':zeros:cons:s:incr:adx:nats:hd:tl
a__hd :: 0':zeros:cons:s:incr:adx:nats:hd:tl → 0':zeros:cons:s:incr:adx:nats:hd:tl
mark :: 0':zeros:cons:s:incr:adx:nats:hd:tl → 0':zeros:cons:s:incr:adx:nats:hd:tl
a__tl :: 0':zeros:cons:s:incr:adx:nats:hd:tl → 0':zeros:cons:s:incr:adx:nats:hd:tl
nats :: 0':zeros:cons:s:incr:adx:nats:hd:tl
hd :: 0':zeros:cons:s:incr:adx:nats:hd:tl → 0':zeros:cons:s:incr:adx:nats:hd:tl
tl :: 0':zeros:cons:s:incr:adx:nats:hd:tl → 0':zeros:cons:s:incr:adx:nats:hd:tl
hole_0':zeros:cons:s:incr:adx:nats:hd:tl1_0 :: 0':zeros:cons:s:incr:adx:nats:hd:tl
gen_0':zeros:cons:s:incr:adx:nats:hd:tl2_0 :: Nat → 0':zeros:cons:s:incr:adx:nats:hd:tl
Generator Equations:
gen_0':zeros:cons:s:incr:adx:nats:hd:tl2_0(0) ⇔ 0'
gen_0':zeros:cons:s:incr:adx:nats:hd:tl2_0(+(x, 1)) ⇔ cons(0', gen_0':zeros:cons:s:incr:adx:nats:hd:tl2_0(x))
The following defined symbols remain to be analysed:
a__hd, a__tl
They will be analysed ascendingly in the following order:
a__hd = mark
a__hd = a__tl
mark = a__tl
(13) NoRewriteLemmaProof (LOWER BOUND(ID) transformation)
Could not prove a rewrite lemma for the defined symbol a__hd.
(14) Obligation:
TRS:
Rules:
a__nats →
a__adx(
a__zeros)
a__zeros →
cons(
0',
zeros)
a__incr(
cons(
X,
Y)) →
cons(
s,
incr(
Y))
a__adx(
cons(
X,
Y)) →
a__incr(
cons(
X,
adx(
Y)))
a__hd(
cons(
X,
Y)) →
mark(
X)
a__tl(
cons(
X,
Y)) →
mark(
Y)
mark(
nats) →
a__natsmark(
adx(
X)) →
a__adx(
mark(
X))
mark(
zeros) →
a__zerosmark(
incr(
X)) →
a__incr(
mark(
X))
mark(
hd(
X)) →
a__hd(
mark(
X))
mark(
tl(
X)) →
a__tl(
mark(
X))
mark(
cons(
X1,
X2)) →
cons(
X1,
X2)
mark(
0') →
0'mark(
s) →
sa__nats →
natsa__adx(
X) →
adx(
X)
a__zeros →
zerosa__incr(
X) →
incr(
X)
a__hd(
X) →
hd(
X)
a__tl(
X) →
tl(
X)
Types:
a__nats :: 0':zeros:cons:s:incr:adx:nats:hd:tl
a__adx :: 0':zeros:cons:s:incr:adx:nats:hd:tl → 0':zeros:cons:s:incr:adx:nats:hd:tl
a__zeros :: 0':zeros:cons:s:incr:adx:nats:hd:tl
cons :: 0':zeros:cons:s:incr:adx:nats:hd:tl → 0':zeros:cons:s:incr:adx:nats:hd:tl → 0':zeros:cons:s:incr:adx:nats:hd:tl
0' :: 0':zeros:cons:s:incr:adx:nats:hd:tl
zeros :: 0':zeros:cons:s:incr:adx:nats:hd:tl
a__incr :: 0':zeros:cons:s:incr:adx:nats:hd:tl → 0':zeros:cons:s:incr:adx:nats:hd:tl
s :: 0':zeros:cons:s:incr:adx:nats:hd:tl
incr :: 0':zeros:cons:s:incr:adx:nats:hd:tl → 0':zeros:cons:s:incr:adx:nats:hd:tl
adx :: 0':zeros:cons:s:incr:adx:nats:hd:tl → 0':zeros:cons:s:incr:adx:nats:hd:tl
a__hd :: 0':zeros:cons:s:incr:adx:nats:hd:tl → 0':zeros:cons:s:incr:adx:nats:hd:tl
mark :: 0':zeros:cons:s:incr:adx:nats:hd:tl → 0':zeros:cons:s:incr:adx:nats:hd:tl
a__tl :: 0':zeros:cons:s:incr:adx:nats:hd:tl → 0':zeros:cons:s:incr:adx:nats:hd:tl
nats :: 0':zeros:cons:s:incr:adx:nats:hd:tl
hd :: 0':zeros:cons:s:incr:adx:nats:hd:tl → 0':zeros:cons:s:incr:adx:nats:hd:tl
tl :: 0':zeros:cons:s:incr:adx:nats:hd:tl → 0':zeros:cons:s:incr:adx:nats:hd:tl
hole_0':zeros:cons:s:incr:adx:nats:hd:tl1_0 :: 0':zeros:cons:s:incr:adx:nats:hd:tl
gen_0':zeros:cons:s:incr:adx:nats:hd:tl2_0 :: Nat → 0':zeros:cons:s:incr:adx:nats:hd:tl
Generator Equations:
gen_0':zeros:cons:s:incr:adx:nats:hd:tl2_0(0) ⇔ 0'
gen_0':zeros:cons:s:incr:adx:nats:hd:tl2_0(+(x, 1)) ⇔ cons(0', gen_0':zeros:cons:s:incr:adx:nats:hd:tl2_0(x))
The following defined symbols remain to be analysed:
a__tl
They will be analysed ascendingly in the following order:
a__hd = mark
a__hd = a__tl
mark = a__tl
(15) NoRewriteLemmaProof (LOWER BOUND(ID) transformation)
Could not prove a rewrite lemma for the defined symbol a__tl.
(16) Obligation:
TRS:
Rules:
a__nats →
a__adx(
a__zeros)
a__zeros →
cons(
0',
zeros)
a__incr(
cons(
X,
Y)) →
cons(
s,
incr(
Y))
a__adx(
cons(
X,
Y)) →
a__incr(
cons(
X,
adx(
Y)))
a__hd(
cons(
X,
Y)) →
mark(
X)
a__tl(
cons(
X,
Y)) →
mark(
Y)
mark(
nats) →
a__natsmark(
adx(
X)) →
a__adx(
mark(
X))
mark(
zeros) →
a__zerosmark(
incr(
X)) →
a__incr(
mark(
X))
mark(
hd(
X)) →
a__hd(
mark(
X))
mark(
tl(
X)) →
a__tl(
mark(
X))
mark(
cons(
X1,
X2)) →
cons(
X1,
X2)
mark(
0') →
0'mark(
s) →
sa__nats →
natsa__adx(
X) →
adx(
X)
a__zeros →
zerosa__incr(
X) →
incr(
X)
a__hd(
X) →
hd(
X)
a__tl(
X) →
tl(
X)
Types:
a__nats :: 0':zeros:cons:s:incr:adx:nats:hd:tl
a__adx :: 0':zeros:cons:s:incr:adx:nats:hd:tl → 0':zeros:cons:s:incr:adx:nats:hd:tl
a__zeros :: 0':zeros:cons:s:incr:adx:nats:hd:tl
cons :: 0':zeros:cons:s:incr:adx:nats:hd:tl → 0':zeros:cons:s:incr:adx:nats:hd:tl → 0':zeros:cons:s:incr:adx:nats:hd:tl
0' :: 0':zeros:cons:s:incr:adx:nats:hd:tl
zeros :: 0':zeros:cons:s:incr:adx:nats:hd:tl
a__incr :: 0':zeros:cons:s:incr:adx:nats:hd:tl → 0':zeros:cons:s:incr:adx:nats:hd:tl
s :: 0':zeros:cons:s:incr:adx:nats:hd:tl
incr :: 0':zeros:cons:s:incr:adx:nats:hd:tl → 0':zeros:cons:s:incr:adx:nats:hd:tl
adx :: 0':zeros:cons:s:incr:adx:nats:hd:tl → 0':zeros:cons:s:incr:adx:nats:hd:tl
a__hd :: 0':zeros:cons:s:incr:adx:nats:hd:tl → 0':zeros:cons:s:incr:adx:nats:hd:tl
mark :: 0':zeros:cons:s:incr:adx:nats:hd:tl → 0':zeros:cons:s:incr:adx:nats:hd:tl
a__tl :: 0':zeros:cons:s:incr:adx:nats:hd:tl → 0':zeros:cons:s:incr:adx:nats:hd:tl
nats :: 0':zeros:cons:s:incr:adx:nats:hd:tl
hd :: 0':zeros:cons:s:incr:adx:nats:hd:tl → 0':zeros:cons:s:incr:adx:nats:hd:tl
tl :: 0':zeros:cons:s:incr:adx:nats:hd:tl → 0':zeros:cons:s:incr:adx:nats:hd:tl
hole_0':zeros:cons:s:incr:adx:nats:hd:tl1_0 :: 0':zeros:cons:s:incr:adx:nats:hd:tl
gen_0':zeros:cons:s:incr:adx:nats:hd:tl2_0 :: Nat → 0':zeros:cons:s:incr:adx:nats:hd:tl
Generator Equations:
gen_0':zeros:cons:s:incr:adx:nats:hd:tl2_0(0) ⇔ 0'
gen_0':zeros:cons:s:incr:adx:nats:hd:tl2_0(+(x, 1)) ⇔ cons(0', gen_0':zeros:cons:s:incr:adx:nats:hd:tl2_0(x))
No more defined symbols left to analyse.